package br.com.requisicao.compra.service.impl;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import br.com.requisicao.compra.canonico.Filtro;
import br.com.requisicao.compra.canonico.PedidoCotacaoProduto;
import br.com.requisicao.compra.canonico.RequisicaoCompra;
import br.com.requisicao.compra.canonico.RequisicaoCompraProduto;
import br.com.requisicao.compra.constantes.ConstantesMensagensSucesso;
import br.com.requisicao.compra.dao.IRequisicaoCompraDAO;
import br.com.requisicao.compra.dao.impl.RequisicaoCompraDAO;
import br.com.requisicao.compra.service.IPedidoCotacaoProdutoService;
import br.com.requisicao.compra.service.IRequisicaoCompraService;

public class RequisicaoCompraService implements IRequisicaoCompraService {

	private IRequisicaoCompraDAO IRequisicaoCompraDAO;
	private IPedidoCotacaoProdutoService pedidoCotacaoProdutoService;

	public void salvar(RequisicaoCompra requisicaoCompra) {
		this.IRequisicaoCompraDAO = new RequisicaoCompraDAO();
		try {
			IRequisicaoCompraDAO.salvarRequisicaoCompra(requisicaoCompra);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void update(RequisicaoCompra requisicaoCompra) {
		this.IRequisicaoCompraDAO = new RequisicaoCompraDAO();
		try {
			IRequisicaoCompraDAO.update(requisicaoCompra);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void salvaNovoProdutoRequisicaoCompra(
			RequisicaoCompraProduto requisicaoCompraProduto) {
		this.IRequisicaoCompraDAO = new RequisicaoCompraDAO();
		try {
			IRequisicaoCompraDAO.salvarRequisicaoCompraProduto(requisicaoCompraProduto);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public RequisicaoCompra pesquisarPorId(Long codigo) {
		this.IRequisicaoCompraDAO = new RequisicaoCompraDAO();
		RequisicaoCompra requisicaoCompra = null;
		try {
			requisicaoCompra = IRequisicaoCompraDAO.pesquisarPorId(codigo);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return requisicaoCompra;
	}

	public List<RequisicaoCompra> obtemRequisicaoCompraCompleto(String perfilUsuario, Filtro filtro) {
		this.IRequisicaoCompraDAO = new RequisicaoCompraDAO();
		List<RequisicaoCompra> listaRequisicaoCompra = null;
		try {
			listaRequisicaoCompra = IRequisicaoCompraDAO
					.obtemRequisicaoCompraCompleto(perfilUsuario, filtro);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return listaRequisicaoCompra;
	}

	public Boolean excluirRequisicaoCompra(
			RequisicaoCompra requisicaoCompra) {

		FacesContext context = FacesContext.getCurrentInstance();

		this.IRequisicaoCompraDAO = new RequisicaoCompraDAO();
		this.pedidoCotacaoProdutoService = new PedidoCotacaoProdutoService();

		PedidoCotacaoProduto pedidoCotacaoProduto = null;

		Boolean deletou = false;
		try {

			pedidoCotacaoProduto = pedidoCotacaoProdutoService.obtemPedidoCotacaoPorIdRequisicaoCompra(requisicaoCompra.getCodigo());

			if (pedidoCotacaoProduto != null) {

				FacesMessage msg = new FacesMessage(
						ConstantesMensagensSucesso.REQUISICAO_COMPRA_RELACIONADA_PEDIDO_COTACAO);
				msg.setSeverity(FacesMessage.SEVERITY_ERROR);
				context.addMessage(null, msg);

			} else {
				IRequisicaoCompraDAO.excluirRequisicaoCompra(requisicaoCompra);

				deletou = true;

				FacesMessage msg = new FacesMessage(
						ConstantesMensagensSucesso.REQUISICAO_COMPRA_EXCLUIDA_SUCESSO);
				msg.setSeverity(FacesMessage.SEVERITY_INFO);
				context.addMessage(null, msg);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return deletou;
	}

	public Boolean excluirRequisicaoCompraProduto(
			RequisicaoCompraProduto requisicaoCompraProduto) {

		FacesContext context = FacesContext.getCurrentInstance();

		this.IRequisicaoCompraDAO = new RequisicaoCompraDAO();
		this.pedidoCotacaoProdutoService = new PedidoCotacaoProdutoService();

		PedidoCotacaoProduto pedidoCotacaoProduto = null;

		Boolean deletou = false;
		try {

			pedidoCotacaoProduto = pedidoCotacaoProdutoService.obtemPedidoCotacaoPorIdRequisicaoCompra(requisicaoCompraProduto.getCodigo());

			if (pedidoCotacaoProduto != null) {

				FacesMessage msg = new FacesMessage(
						ConstantesMensagensSucesso.REQUISICAO_COMPRA_PRODUTO_RELACIONADA_PEDIDO_COTACAO);
				msg.setSeverity(FacesMessage.SEVERITY_ERROR);
				context.addMessage(null, msg);

			} else {
				IRequisicaoCompraDAO.excluirRequisicaoCompraProduto(requisicaoCompraProduto);

				deletou = true;

				FacesMessage msg = new FacesMessage(
						ConstantesMensagensSucesso.REQUISICAO_COMPRA_PRODUTO_EXCLUIDA_SUCESSO);
				msg.setSeverity(FacesMessage.SEVERITY_INFO);
				context.addMessage(null, msg);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return deletou;
	}

	public RequisicaoCompra obtemRequisicaoCompraPorId(Long codigo) {
		this.IRequisicaoCompraDAO = new RequisicaoCompraDAO();
		RequisicaoCompra requisicaoCompra = null;
		try {
			requisicaoCompra = IRequisicaoCompraDAO.obtemRequisicaoCompraPorId(codigo);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return requisicaoCompra;
	}

	/**
	 * @return the iRequisicaoCompraDAO
	 */
	public IRequisicaoCompraDAO getIRequisicaoCompraDAO() {
		return IRequisicaoCompraDAO;
	}

	/**
	 * @param iRequisicaoCompraDAO
	 *            the iRequisicaoCompraDAO to set
	 */
	public void setIRequisicaoCompraDAO(
			IRequisicaoCompraDAO iRequisicaoCompraDAO) {
		IRequisicaoCompraDAO = iRequisicaoCompraDAO;
	}

	/**
	 * @return the pedidoCotacaoProdutoService
	 */
	public IPedidoCotacaoProdutoService getPedidoCotacaoProdutoService() {
		return pedidoCotacaoProdutoService;
	}

	/**
	 * @param pedidoCotacaoProdutoService
	 *            the pedidoCotacaoProdutoService to set
	 */
	public void setPedidoCotacaoProdutoService(IPedidoCotacaoProdutoService pedidoCotacaoProdutoService) {
		this.pedidoCotacaoProdutoService = pedidoCotacaoProdutoService;
	}

}